---
title: lefthook
description: ステージされた Git ファイルで lefthook を使って Ultracite を自動実行する
---

Ultracite は、高速で強力な Git フックマネージャである [lefthook](https://lefthook.dev/) とシームレスに統合されます。この統合により、コミット前にコードが適切にフォーマットされていることを保証するための pre-commit フックが自動的に設定されます。

## lefthook とは？

lefthook は、Node.js と Go プロジェクト向けのネイティブで高速な Git フックマネージャです。シンプルで高速かつ強力になるよう設計されており、リポジトリにコミットできる設定ファイルを使ってチーム全体で Git フックを管理できます。

## Ultracite が lefthook をどのように使うか

プロジェクトで Ultracite を初期化すると、コミット前にコード整形を実行するように lefthook を自動的に構成できます。これにより次のことが保証されます:

- コミットされるすべてのコードが一貫したフォーマット基準に従う
- コード品質のチェックが自動的に適用される
- チームメンバーが手動でコードを整形する必要がなくなる
- リポジトリがクリーンで一貫したコードスタイルを維持する

## Pre-commit フックの動作

Ultracite の lefthook 統合は、次のコマンドを実行する pre-commit フックを作成します:

```bash
npx ultracite fix
```

このコマンドは:
- Biome のリンターとフォーマッターをコードベース上で実行します
- 可能な限りフォーマットの問題を自動修正します
- ステージされたすべてのファイルがプロジェクトのコード基準を満たしていることを保証します
- フォーマットの不整合を導入するコミットを防止します

## 自動セットアップ

初期化プロセス（`ultracite init`）の間に lefthook オプションを選択すると、Ultracite は次の操作を行います:

1. **lefthook をインストール**: プロジェクトに lefthook を開発依存関係として追加します
2. **lefthook を初期化**: `lefthook install` を実行して Git フックを設定します
3. **設定ファイルを作成**: フォーマットコマンドを含む `lefthook.yml` ファイルを設定します
4. **既存セットアップの扱い**: すでに lefthook が構成されている場合は、上書きせずに既存の設定を更新します

## 統合の詳細

lefthook 統合は、いくつかのスマートな機能を含みます:

### 依存関係の管理
- プロジェクトのパッケージマネージャを使用して自動的に lefthook を dev 依存としてインストールします
- 適切なパッケージマネージャコマンド（`npm install -D`、`yarn add -D`、`pnpm add -D` など）を使用します
- Git フックを初期化するために `lefthook install` を実行します

### 設定の管理
- **新規プロジェクト**: ultracite fix コマンドを含む新しい `lefthook.yml` ファイルを作成します
- **既存プロジェクト**: 既存の lefthook 設定に Ultracite コマンドを追加し、他に構成されているフックを保持します

### ファイル構成
統合は次のファイルを作成または変更します:
```
lefthook.yml    # Contains the formatting command configuration
```

## 利点

- **チームの一貫性**: 全てのチームメンバーに同じフォーマットが自動的に適用されます
- **ゼロコンフィギュレーション**: 妥当なデフォルトでそのまますぐに動作します
- **高速なパフォーマンス**: lefthook は Go で書かれており非常に高速です
- **柔軟性**: 追加のコマンドやフックで簡単に拡張できます
- **クロスプラットフォーム**: 異なる OS 間でも一貫して動作します

## ワークフローへの統合

lefthook 統合は開発ワークフローにシームレスに組み込まれます:

1. **開発者がコード変更を行う**
2. **ファイルをステージする**（`git add`）
3. **コミットを試みる**（`git commit`）
4. **lefthook が** pre-commit フックを自動的にトリガーする
5. **Ultracite が実行され** ステージされたファイルをフォーマットする
6. フォーマットが成功すれば **コミットが進行** し、自己修正できない問題があれば **失敗** します

## カスタマイズ

Ultracite は妥当なデフォルトを設定しますが、動作をカスタマイズできます:

- 追加のコマンドやフックを追加するために `lefthook.yml` を変更する
- フォーマットルールを調整するために Biome の設定を構成する
- Ultracite のフォーマットに加えて他の pre-commit チェックを追加する
- lefthook の強力な並列実行や条件付きロジック機能を活用する

## トラブルシューティング

### フックが動かない
pre-commit フックが実行されない場合:
- lefthook がインストールされていることを確認: `npm ls lefthook`
- `lefthook.yml` が存在し、ultracite コマンドが含まれていることを確認する
- リポジトリで Git フックが有効になっているか確認する
- フックを再インストールするには `lefthook install` を実行する

### 権限の問題
lefthook は Git フックの権限を自動的に処理しますが、問題が発生した場合は:
- もう一度 `lefthook install` を実行してみてください
- Git の設定がフックを許可しているか確認してください

### フックをバイパスする
pre-commit フックをスキップする必要がある稀なケースでは:
```bash
git commit --no-verify
```

これはコードベースの一貫性を保つ自動フォーマットをバイパスするため、乱用は避けてください。

## 設定例

以下は `lefthook.yml` の設定例です:

```yaml
pre-commit:
  jobs:
    - run: npx ultracite fix
      glob: 
        - "*.js"
        - "*.jsx"
        - "*.ts"
        - "*.tsx"
        - "*.json"
        - "*.jsonc"
        - "*.css"
      stage_fixed: true
```

この設定は:
- JavaScript、TypeScript、JSON、CSS ファイルにのみ実行されます
- フォーマッターによって修正されたファイルを自動的にステージします
- パフォーマンス向上のために効率的な `jobs` 構文を使用します

次のように追加のジョブを含めるようにこの設定を拡張できます:

```yaml
pre-commit:
  jobs:
    - run: npx ultracite fix
      glob: 
        - "*.js"
        - "*.jsx"
        - "*.ts"
        - "*.tsx"
        - "*.json"
        - "*.jsonc"
        - "*.css"
      stage_fixed: true
    - run: npm test
      glob: "*.{js,ts}"
    - run: tsc --noEmit
      glob: "*.{ts,tsx}"
```